import axios from 'axios';
import config from './config.js' // 倒入默认配置
axios.defaults.withCredentials = true

export default function $axios(options) {
    return new Promise((resolve, reject) => {
        const instance = axios.create({
            baseURL: config.baseURL,
            headers: {},
            transformResponse: [function () { }]
        })

        /**
         * request 拦截器
         * 在发送请求之前做些什么
         */
        instance.interceptors.request.use(
            config => {
                // 根据请求方法，序列化传来的参数，根据后端需求是否序列化
                if (config.method.toLocaleLowerCase() === 'post' || config.method.toLocaleLowerCase() === 'put' || config
                    .method
                    .toLocaleLowerCase() === 'delete') {
                    config.headers['Content-Type'] = 'application/json;charset=UTF-8';
                }

                // header头带上cookies
                // let cookies = sessionStorage.getItem('cookies');
                // if (cookies) {
                //   config.headers.Authorization = 'Bearer ' + cookies;
                // }
                return config
            },

            error => {
                // 1.判断请求超时
                if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
                    //   Util.Info({
                    //     message: error.msg || '判断请求现在超时了'
                    //   })
                }
                return Promise.reject(error) // 在调用的那边可以拿到(catch)你想返回的错误信息
            }
        )

        /**
         * response 拦截器
         * 对返回数据做统一处理
         */
        instance.interceptors.response.use(
            response => {
                let data
                // IE9时response.data是undefined，因此需要使用response.request.responseText(Stringify后的字符串)
                if (response.data == undefined) {
                    data = JSON.parse(response.request.responseText)
                } else {
                    data = JSON.parse(response.data)
                }
                if (data.code == undefined) {
                    return data;
                }
                switch (data.code) {
                    case '0':
                        // 请求成功，不做处理
                        break
                    case 200:
                        // 请求成功，不做处理
                        break
                    case 603:
                        // 登录失效
                        // sessionStorage.removeItem('token')
                        // sessionStorage.removeItem('cookie')
                        // window.location.href = '/mobile'
                        break
                    case 604:
                        //免登录失效，不处理
                        break;
                    default:
                        /* Util.Info({
                          message: data.message || data.msg || '出错了，请联系管理员'
                        }) */
                        // showModal({
                        //   message: data.message || data.msg || '出错了，请联系管理员'
                        // })
                        break
                }

                return data
            },
            err => {
                // alert(JSON.stringify(err));
                if (err && err.response) {
                    // switch (err.response.status) {
                    //     case 400:
                    //         err.message = '请求错误'
                    //         break
                    //     case 401:
                    //         err.message = '未授权，请登录'
                    //         break
                    //     case 403:
                    //         err.message = '拒绝访问'
                    //         break
                    //     case 404:
                    //         err.message = `请求地址出错: ${err.response.config.url}`
                    //         break
                    //     case 408:
                    //         err.message = '请求超时'
                    //         break
                    //     case 500:
                    //         err.message = '服务器内部错误'
                    //         break
                    //     case 501:
                    //         err.message = '服务未实现'
                    //         break
                    //     case 502:
                    //         err.message = '网关错误'
                    //         break
                    //     case 503:
                    //         err.message = '服务不可用'
                    //         break
                    //     case 504:
                    //         err.message = '网关超时'
                    //         break
                    //     case 505:
                    //         err.message = 'HTTP版本不受支持'
                    //         break
                    //     case 606:
                    //         err.message = '未登录或登录超时。请重新登录'
                    //         break
                    //     default:
                    // }
                }

                // showModal({
                //   message: err.message || '出错了，请联系管理员'
                // })
                return Promise.reject(err) // 返回接口返回的错误信息
            }

        )

        // 请求处理
        instance(options)
            .then((res) => {
                resolve(res)
                return false
            })
            .catch((error) => {
                reject(error)
            })
    })
}
